package com.rongji.dfish.tool;
//
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.InputStream;
//import java.lang.reflect.Method;
//import java.lang.reflect.Modifier;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collections;
//import java.util.Comparator;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Map;
//import java.util.TreeMap;
//
//import org.springframework.core.io.ClassPathResource;
//
//import com.google.gson.Gson;
//import com.rongji.dfish.demo.service.compdef.ComponentDefine;
//import com.rongji.dfish.demo.service.compdef.ComponentsInfo;
//import com.rongji.dfish.demo.service.uiadaptor.PropertyDefine;
//import com.rongji.dfish.ui.JsonObject;
//
//
public class DefinedFileCreator {
//	public static void main(String[] args) throws Exception{
//		List<String> allClasses= getAllClassName();
////		System.out.println(allClasses);
////		StringBuilder sb=new StringBuilder();
//		ComponentsInfo info=genJson(allClasses);
//		Gson g=new Gson();
//		System.out.println(g.toJson(info));
//		
//	}
//
//
//
//	private static List<String> getAllClassName() {
//		List<String> result=new ArrayList<String>();
//		File f=new File("WebRoot/WEB-INF/classes");
//		findJsonObjectClasses(f,result);
//		Collections.sort(result);
//		return result;
//	}
//
//	private static void findJsonObjectClasses(File f,List<String> result) {
//		if(f.isDirectory()){
//			for(File sub:f.listFiles()){
//				findJsonObjectClasses(sub,result);
//			}
//			return;
//		}
//		if(f.isFile()){
//			if(f.getName().endsWith("class")){
//				String fullName=f.getAbsolutePath();
//				fullName=fullName.replace('\\', '.').replace('/', '.');
//				int begin=fullName.indexOf("com.rongji.dfish.ui");
//				if(begin<0){
//					return;
//				}
//				String clzName=fullName.substring(begin);
//				clzName=clzName.substring(0,clzName.length()-6);
//				if(clzName.contains("$")){
//					return;
//				}
//				result.add(clzName);
//			}
//			return;
//		}
//	}
//	private static ComponentsInfo genJson(List<String> allClasses) throws Exception {
//		ComponentsInfo oldInfo=getInfoFromJson();
//		TreeMap<String,ComponentDefine> defs=new TreeMap<String,ComponentDefine>();
//		for(ComponentDefine def:oldInfo.getComponents()){
//			defs.put(def.getName(), def);
//		}
//		for(String clzName:allClasses){
//			Class c=Class.forName(clzName);
//			if(!JsonObject.class.isAssignableFrom(c)){
//				continue;
//			}
//			int modifier=c.getModifiers();
//			if(Modifier.isAbstract(modifier)||!Modifier.isPublic(modifier)){
//				continue;
//			}
//			String shortName=c.getSimpleName();
//			TreeMap<String,String> propMap=new TreeMap<String,String>();
//			for(Method m:c.getMethods()){
//				if(m.getName().startsWith("set")&&m.getParameterTypes().length==1){
//					String propName=m.getName().substring(3);
//					propName=((char)(propName.charAt(0)+32))+propName.substring(1);
//					String type=m.getParameterTypes()[0].getSimpleName();
//					propMap.put(propName,type);
//				}
//			}
//			
//			ComponentDefine def=defs.get(shortName);
//			if(def!=null){
//				//增加新的属性。排序新的属性
//				List<PropertyDefine> props=def.getProps();
//				//如果PROPS里面不报航 那么
//				for(Map.Entry<String, String> entry:propMap.entrySet()){
//					if(contains(props,entry.getKey())){
//						continue;
//					}
//					PropertyDefine propDef=new PropertyDefine();
//					props.add(propDef);
//					propDef.setName(entry.getKey());
//					propDef.setCname(entry.getKey());
//					propDef.setType(entry.getValue());
//				}
//				
//				sortProps(props);
//			}else{
//				def=new ComponentDefine();
//				oldInfo.getComponents().add(def);
//				def.setName(shortName);
//				def.setCategory("unknown");
//				def.setCname(shortName);
//				//增加新的节点
//				List<PropertyDefine> props=new ArrayList<PropertyDefine>();
//				def.setProps(props);
//				for(Map.Entry<String, String> entry:propMap.entrySet()){
//					PropertyDefine propDef=new PropertyDefine();
//					props.add(propDef);
//					propDef.setName(entry.getKey());
//					propDef.setCname(entry.getKey());
//					propDef.setType(entry.getValue());
//				}
//				sortProps(props);
//			}
//		}
//		sortComponents(oldInfo.getComponents());
//		return oldInfo;
//	}
//
//
//
//	private static boolean contains(List<PropertyDefine> props, String key) {
//		for(PropertyDefine p:props){
//			if(key.equals(p.getName())){
//				return true;
//			}
//		}
//		return false;
//	}
//
//
//	public static final List<String>ORDERED_PORPS = Arrays.asList(
//			//控制属性
//			"id","type","func","face",
//			//普遍属性
//			"name","value","title","text",
//			//样式属性
//			"clz","styleClass","style","width","height","widthMinus","heightMinus",
//			"scroll",
//			//表单属性
//			"ntn","notnull","disabled","readonly","hidden",
//			//子属性
//			"defaults","nodes","rows","vlds","events",
//			//特殊子属性
//			"columns","thead","tbody",
//			"src"
//		);
//	private static void sortProps(List<PropertyDefine> props) {
//		Collections.sort(props, new Comparator<PropertyDefine>(){
//			public int compare(PropertyDefine o1, PropertyDefine o2) {
//				String name1=o1.getName();
//				String name2=o2.getName();
//				int pos1=ORDERED_PORPS.indexOf(name1);
//				int pos2=ORDERED_PORPS.indexOf(name2);
//				if(pos1>=0&&pos2>=0){
//					return pos1-pos2;
//				}else if(pos1>=0){
//					return -1;
//				}else if(pos2>=0){
//					return 1;
//				}else{
//					return name1.compareTo(name2);
//				}
//			}
//		});
//	}
//
//
//
//	private static void sortComponents(List<ComponentDefine> components) {
//		Collections.sort(components, new Comparator<ComponentDefine>(){
//			public int compare(ComponentDefine o1, ComponentDefine o2) {
//				int i=o1.getCategory().compareTo(o2.getCategory());
//				if(i!=0)return i;
//				return o1.getName().compareTo(o2.getName());
//			}
//		});
//	}
//
//
//
//	private static ComponentsInfo getInfoFromJson() {
//		String json="";
//		try{
//			ClassPathResource cpr=new ClassPathResource("com/rongji/dfish/demo/service/compdef/components.json");
//			InputStream is=cpr.getInputStream();
//			ByteArrayOutputStream baos=new ByteArrayOutputStream();
//			byte[] buff=new byte[8192];
//			int readed=0;
//			while((readed=is.read(buff))>=0){
//				baos.write(buff,0,readed);
//			}
//			json=new String(baos.toByteArray(),"UTF-8");
//			is.close();
//			baos.close();
//		}catch(Exception ex){}
//		Gson g=new Gson();
//		ComponentsInfo info= g.fromJson(json, ComponentsInfo.class);
//		return info;
//	}
}
